package com.ruoyi.basedata.service;

import cn.hutool.core.collection.CollUtil;
import com.ruoyi.basedata.domain.DwAreas;
import com.ruoyi.basedata.wxentity.AreaTreaXBDosage;
import com.ruoyi.common.utils.CollectionUtils;

import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;

/**
 * 区域Service接口
 * 
 * @author ruoyi
 * @date 2023-09-06
 */
public interface IDwAreasService 
{
    /**
     * 查询区域
     * 
     * @param ID 区域主键
     * @return 区域
     */
    public DwAreas selectDwAreasByID(Long ID);

    /**
     * 查询区域列表
     * 
     * @param dwAreas 区域
     * @return 区域集合
     */
    public List<DwAreas> selectDwAreasList(DwAreas dwAreas);

    /**
     * 新增区域
     * 
     * @param dwAreas 区域
     * @return 结果
     */
    public int insertDwAreas(DwAreas dwAreas);

    /**
     * 修改区域
     * 
     * @param dwAreas 区域
     * @return 结果
     */
    public int updateDwAreas(DwAreas dwAreas);

    /**
     * 批量删除区域
     * 
     * @param IDs 需要删除的区域主键集合
     * @return 结果
     */
    public int deleteDwAreasByIDs(Long[] IDs);

    /**
     * 删除区域信息
     * 
     * @param ID 区域主键
     * @return 结果
     */
    public int deleteDwAreasByID(Long ID);

    //根据区域id查询该区域的子区域
    public List<DwAreas> selectAreaList(Long id);

    public List<DwAreas> selectAreaList(Collection<String> areaCodes);

    List<DwAreas> getAreaTree();
    default Map<String, DwAreas> getAreaMap(Collection<String> areaCodes) {
        if (CollUtil.isEmpty(areaCodes)) {
            return Collections.emptyMap();
        }
        List<DwAreas> dwAreas = selectAreaList(areaCodes);
        return CollectionUtils.convertMap(dwAreas,DwAreas::getAreaCode);
    }

    DwAreas selectDwAreasByAreaCode(String areaCode);

    List<DwAreas> childrenList(Long id,String areaName);

    List<AreaTreaXBDosage> getAreaTreeForMobile(Integer areaId);

}
